﻿// Copyright 2009 Mike Geise
// 
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// 
//     http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

namespace Falcon.Core
{
	using System.Web.Mvc;
	using System.Web.Routing;

	public static class Routes
	{
		// public constants
		public const string AttachmentDelete = "attachment.delete";
		public const string AttachmentDetail = "attachment.detail";
		public const string AttachmentImage = "attachment.image";
		public const string AttachmentRuleIndex = "attachment.rule.index";
		public const string AttachmentRuleUpdate = "attachment.rule.update";
		public const string AttachmentRuleDelete = "attachment.rule.delete";
		public const string AttachmentRuleCreate = "attachment.rule.create";
		public const string SystemIndex = "system.index";
		public const string SystemCountryIndex = "system.country.index";
		public const string SystemCountryUpdate = "system.country.update";
		public const string SystemCountryDelete = "system.country.delete";
		public const string SystemCountryCreate = "system.country.create";
		public const string SystemCountrySetup = "system.country.setup";
		public const string SystemLanguageIndex = "system.language.index";
		public const string SystemLanguageUpdate = "system.language.update";
		public const string SystemLanguageDelete = "system.language.delete";
		public const string SystemLanguageCreate = "system.language.create";
		public const string SystemResourceIndex = "system.resource.index";
		public const string SystemResourceUpdate = "system.resource.update";
		public const string SystemResourceDelete = "system.resource.delete";
		public const string SystemResourceCreate = "system.resource.create";
		public const string SystemSettingIndex = "system.setting.index";
		public const string SystemSettingUpdate = "system.setting.update";
		public const string SystemSettingDelete = "system.setting.delete";
		public const string SystemSettingCreate = "system.setting.create";
		public const string SystemTimeZoneIndex = "system.timezone.index";
		public const string SystemTimeZoneUpdate = "system.timezone.update";
		public const string SystemTimeZoneDelete = "system.timezone.delete";
		public const string SystemTimeZoneCreate = "system.timezone.create";
		public const string SystemTimeZoneSetup = "system.timezone.setup";
		public const string SystemUserIndex = "system.user.index";
		public const string SystemUserCreate = "system.user.create";
		public const string SystemUserUpdate = "system.user.update";
		public const string SystemUserDelete = "system.user.delete";
		public const string SystemUserPermission = "system.user.permission";
		public const string SystemUserPreferenceUpdate = "system.user.preference.update";
		public const string SystemUserProfileUpdate = "system.user.profile.update";
		public const string SystemUserBadgeIndex = "system.user.badge.index";
		public const string SystemUserBadgeGive = "system.user.badge.give";
		public const string SystemUserBadgeCreate = "system.user.badge.create";
		public const string SystemUserBadgeUpdate = "system.user.badge.update";
		public const string SystemUserBadgeDelete = "system.user.badge.delete";
		public const string SystemUserRoleIndex = "system.user.role.index";
		public const string SystemUserRoleCreate = "system.user.role.create";
		public const string SystemUserRoleUpdate = "system.user.role.update";
		public const string SystemUserRoleDelete = "system.user.role.delete";
		public const string SystemUserSearchIndex = "system.user.search.index";
		public const string SystemUserSearchCreate = "system.user.search.create";
		public const string PollVote = "poll.vote";
		public const string UserAuthUpdate = "user.auth.update";
		public const string UserAuthReset = "user.auth.reset";
		public const string UserLogout = "user.logout";
		public const string UserLogin = "user.login";
		public const string UserIndex = "user.index";
		public const string UserDetail = "user.detail";
		public const string UserCreate = "user.create";
		public const string UserUpdate = "user.update";
		public const string UserPreferenceUpdate = "user.preference.update";
		public const string UserAlbumIndex = "user.album.index";
		public const string UserAlbumDetail = "user.album.detail";
		public const string UserAlbumDashboardIndex = "user.album.dashboard.index";
		public const string UserAlbumDashboardCreate = "user.album.dashboard.create";
		public const string UserAlbumDashboardUpdate = "user.album.dashboard.update";
		public const string UserAlbumDashboardDelete = "user.album.dashboard.delete";
		public const string UserAlbumPhotoIndex = "user.album.photo.index";
		public const string UserAlbumPhotoDetail = "user.album.photo.detail";
		public const string UserAlbumPhotoCreate = "user.album.photo.create";
		public const string UserAlbumPhotoUpdate = "user.album.photo.update";
		public const string UserAlbumPhotoDelete = "user.album.photo.delete";
		public const string UserAvatarIndex = "user.avatar.index";
		public const string UserAvatarCreate = "user.avatar.create";
		public const string UserAvatarSelect = "user.avatar.select";
		public const string UserAvatarDelete = "user.avatar.delete";
		public const string UserContactIndex = "user.contact.index";
		public const string UserContactIgnore = "user.contact.ignore";
		public const string UserContactCreate = "user.contact.create";
		public const string UserContactUpdate = "user.contact.update";
		public const string UserContactDelete = "user.contact.delete";
		public const string UserContactFriend = "user.contact.friend";
		public const string UserDashboardIndex = "user.dashboard.index";
		public const string UserGroupIndex = "user.group.index";
		public const string UserGroupDetail = "user.group.detail";
		public const string UserGroupDashboardIndex = "user.group.dashboard.index";
		public const string UserGroupDashboardCreate = "user.group.dashboard.create";
		public const string UserGroupDashboardUpdate = "user.group.dashboard.update";
		public const string UserGroupDashboardDelete = "user.group.dashboard.delete";
		public const string UserMessageIndex = "user.message.index";
		public const string UserMessageDetail = "user.message.detail";
		public const string UserMessageCreate = "user.message.create";
		public const string UserMessageUpdate = "user.message.update";
		public const string UserMessageMove = "user.message.move";
		public const string UserMessageFolderIndex = "user.message.folder.index";
		public const string UserMessageFolderCreate = "user.message.folder.create";
		public const string UserMessageFolderUpdate = "user.message.folder.update";
		public const string UserMessageFolderDelete = "user.message.folder.delete";
		public const string UserNoteIndex = "user.note.index";
		public const string UserNoteCreate = "user.note.create";
		public const string UserNoteUpdate = "user.note.update";
		public const string UserNoteDelete = "user.note.delete";
		public const string UserProfileUpdate = "user.profile.update";
		public const string UserSearchIndex = "user.search.index";
		public const string UserSearchCreate = "user.search.create";
		public const string UserSearchLookup = "user.search.lookup";
		public const string HomeIndex = "home.index";

		/// <summary>
		/// Registers the specified routes.
		/// </summary>
		/// <param name="routes">The routes.</param>
		public static void Register(RouteCollection routes)
		{
			#region System
			routes.Add(SystemIndex, new Route("system",
				new RouteValueDictionary(new { controller = "system", action = "index" }),
				new MvcRouteHandler()));
			#endregion

			#region System Country
			routes.Add(SystemCountryIndex, new Route("system/countries/all/{page}",
				new RouteValueDictionary(new { area = "system", controller = "systemcountry", action = "index", page = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemCountryUpdate, new Route("system/countries/update/{id}",
				new RouteValueDictionary(new { area = "system", controller = "systemcountry", action = "update", id = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemCountryDelete, new Route("system/countries/delete/{id}",
				new RouteValueDictionary(new { area = "system", controller = "systemcountry", action = "delete", id = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemCountryCreate, new Route("system/countries/create",
				new RouteValueDictionary(new { area = "system", controller = "systemcountry", action = "create" }),
				new MvcRouteHandler()));

			routes.Add(SystemCountrySetup, new Route("system/countries/setup",
				new RouteValueDictionary(new { area = "system", controller = "systemcountry", action = "setup" }),
				new MvcRouteHandler()));
			#endregion

			#region System Language
			routes.Add(SystemLanguageIndex, new Route("system/languages/all/{page}",
				new RouteValueDictionary(new { area = "system", controller = "systemlanguage", action = "index", page = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemLanguageUpdate, new Route("system/languages/update/{id}",
				new RouteValueDictionary(new { area = "system", controller = "systemlanguage", action = "update", id = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemLanguageDelete, new Route("system/languages/delete/{id}",
				new RouteValueDictionary(new { area = "system", controller = "systemlanguage", action = "delete", id = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemLanguageCreate, new Route("system/languages/create",
				new RouteValueDictionary(new { area = "system", controller = "systemlanguage", action = "create" }),
				new MvcRouteHandler()));
			#endregion

			#region System Resource
			routes.Add(SystemResourceIndex, new Route("system/resources/all/{page}",
				new RouteValueDictionary(new { area = "system", controller = "systemresource", action = "index", page = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemResourceUpdate, new Route("system/resources/update/{id}",
				new RouteValueDictionary(new { area = "system", controller = "systemresource", action = "update", id = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemResourceDelete, new Route("system/resources/delete/{id}",
				new RouteValueDictionary(new { area = "system", controller = "systemresource", action = "delete", id = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemResourceCreate, new Route("system/resources/create",
				new RouteValueDictionary(new { area = "system", controller = "systemresource", action = "create" }),
				new MvcRouteHandler()));
			#endregion

			#region System Setting
			routes.Add(SystemSettingIndex, new Route("system/settings/all/{page}",
				new RouteValueDictionary(new { area = "system", controller = "systemsetting", action = "index", page = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemSettingUpdate, new Route("system/settings/update/{id}",
				new RouteValueDictionary(new { area = "system", controller = "systemsetting", action = "update", id = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemSettingDelete, new Route("system/settings/delete/{id}",
				new RouteValueDictionary(new { area = "system", controller = "systemsetting", action = "delete", id = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemSettingCreate, new Route("system/settings/create",
				new RouteValueDictionary(new { area = "system", controller = "systemsetting", action = "create" }),
				new MvcRouteHandler()));
			#endregion

			#region System Time Zone
			routes.Add(SystemTimeZoneIndex, new Route("system/timezones/all/{page}",
				new RouteValueDictionary(new { area = "system", controller = "systemtimezone", action = "index", page = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemTimeZoneUpdate, new Route("system/timezones/update/{id}",
				new RouteValueDictionary(new { area = "system", controller = "systemtimezone", action = "update", id = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemTimeZoneDelete, new Route("system/timezones/delete/{id}",
				new RouteValueDictionary(new { area = "system", controller = "systemtimezone", action = "delete", id = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemTimeZoneCreate, new Route("system/timezones/create",
				new RouteValueDictionary(new { area = "system", controller = "systemtimezone", action = "create" }),
				new MvcRouteHandler()));

			routes.Add(SystemTimeZoneSetup, new Route("system/timezones/setup",
				new RouteValueDictionary(new { area = "system", controller = "systemtimezone", action = "setup" }),
				new MvcRouteHandler()));
			#endregion

			#region System User
			routes.Add(SystemUserIndex, new Route("system/users/all/{status}/{sort}/{order}/{page}",
				new RouteValueDictionary(new { area = "system", controller = "systemuser", action = "index", status = "activated", sort = "name", order = "asc", page = "1" }),
				new MvcRouteHandler()));

			routes.Add(SystemUserCreate, new Route("system/users/create",
				new RouteValueDictionary(new { area = "system", controller = "systemuser", action = "create" }),
				new MvcRouteHandler()));

			routes.Add(SystemUserUpdate, new Route("system/users/update/{id}",
				new RouteValueDictionary(new { area = "system", controller = "systemuser", action = "update", id = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemUserDelete, new Route("system/users/delete/{id}",
				new RouteValueDictionary(new { area = "system", controller = "systemuser", action = "delete", id = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemUserPermission, new Route("system/users/permission/{id}",
				new RouteValueDictionary(new { area = "system", controller = "systemuser", action = "permission", id = "" }),
				new MvcRouteHandler()));
			#endregion

			#region System User Profile
			routes.Add(SystemUserProfileUpdate, new Route("system/users/profile/update/{id}",
				new RouteValueDictionary(new { area = "system/systemuser", controller = "systemuserprofile", action = "update", id = "" }),
				new MvcRouteHandler()));
			#endregion

			#region System User Preference
			routes.Add(SystemUserPreferenceUpdate, new Route("system/users/preference/update/{id}",
				new RouteValueDictionary(new { area = "system/systemuser", controller = "systemuserpreference", action = "update", id = "" }),
				new MvcRouteHandler()));
			#endregion

			#region System User Badge
			routes.Add(SystemUserBadgeIndex, new Route("system/users/badges/all/{page}",
				new RouteValueDictionary(new { area = "system/systemuser", controller = "systemuserbadge", action = "index", page = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemUserBadgeUpdate, new Route("system/users/badges/update/{id}",
				new RouteValueDictionary(new { area = "system/systemuser", controller = "systemuserbadge", action = "update", id = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemUserBadgeDelete, new Route("system/users/badges/delete/{id}",
				new RouteValueDictionary(new { area = "system/systemuser", controller = "systemuserbadge", action = "delete", id = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemUserBadgeGive, new Route("system/users/badges/give",
				new RouteValueDictionary(new { area = "system/systemuser", controller = "systemuserbadge", action = "give" }),
				new MvcRouteHandler()));

			routes.Add(SystemUserBadgeCreate, new Route("system/users/badges/create",
				new RouteValueDictionary(new { area = "system/systemuser", controller = "systemuserbadge", action = "create" }),
				new MvcRouteHandler()));
			#endregion

			#region System User Role
			routes.Add(SystemUserRoleIndex, new Route("system/users/roles/all",
				new RouteValueDictionary(new { area = "system/systemuser", controller = "systemuserrole", action = "index", page = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemUserRoleUpdate, new Route("system/users/roles/update/{id}",
				new RouteValueDictionary(new { area = "system/systemuser", controller = "systemuserrole", action = "update", id = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemUserRoleDelete, new Route("system/users/roles/delete/{id}",
				new RouteValueDictionary(new { area = "system/systemuser", controller = "systemuserrole", action = "delete", id = "" }),
				new MvcRouteHandler()));

			routes.Add(SystemUserRoleCreate, new Route("system/users/roles/create",
				new RouteValueDictionary(new { area = "system/systemuser", controller = "systemuserrole", action = "create" }),
				new MvcRouteHandler()));
			#endregion

			#region System User Search
			routes.Add(SystemUserSearchCreate, new Route("system/users/search/create",
				new RouteValueDictionary(new { area = "system/systemuser", controller = "systemusersearch", action = "create" }),
				new MvcRouteHandler()));

			routes.Add(SystemUserSearchIndex, new Route("system/users/search/{id}/{page}",
				new RouteValueDictionary(new { area = "system/systemuser", controller = "systemusersearch", action = "index", id = "", page = "" }),
				new MvcRouteHandler()));
			#endregion

			#region Attachment
			routes.Add(AttachmentDelete, new Route("attachments/delete/{id}",
				new RouteValueDictionary(new { controller = "attachment", action = "delete", id = "" }),
				new MvcRouteHandler()));

			routes.Add(AttachmentDetail, new Route("attachments/{id}",
				new RouteValueDictionary(new { controller = "attachment", action = "detail", id = "" }),
				new MvcRouteHandler()));

			routes.Add(AttachmentImage, new Route("attachments/image/{id}/{width}/{height}",
				new RouteValueDictionary(new { controller = "attachment", action = "image", id = "", width = "", height = "" }),
				new MvcRouteHandler()));

			routes.Add(AttachmentRuleIndex, new Route("attachments/rules/all/{page}",
				new RouteValueDictionary(new { controller = "attachmentrule", action = "index", page = "" }),
				new MvcRouteHandler()));

			routes.Add(AttachmentRuleUpdate, new Route("attachments/rules/update/{id}",
				new RouteValueDictionary(new { controller = "attachmentrule", action = "update", id = "" }),
				new MvcRouteHandler()));

			routes.Add(AttachmentRuleDelete, new Route("attachments/rules/delete/{id}",
				new RouteValueDictionary(new { controller = "attachmentrule", action = "delete", id = "" }),
				new MvcRouteHandler()));

			routes.Add(AttachmentRuleCreate, new Route("attachments/rules/create",
				new RouteValueDictionary(new { controller = "attachmentrule", action = "create" }),
				new MvcRouteHandler()));
			#endregion

			#region Poll
			routes.Add(PollVote, new Route("polls/vote",
				new RouteValueDictionary(new { controller = "poll", action = "vote" }),
				new MvcRouteHandler()));
			#endregion

			#region User Album
			routes.Add(UserAlbumDashboardCreate, new Route("users/albums/dashboard/create",
				new RouteValueDictionary(new { area = "user/useralbum", controller = "useralbumdashboard", action = "create" }),
				new MvcRouteHandler()));

			routes.Add(UserAlbumIndex, new Route("users/albums/all/{page}",
				new RouteValueDictionary(new { area = "user", controller = "useralbum", action = "index", page = "" }),
				new MvcRouteHandler()));

			routes.Add(UserAlbumPhotoUpdate, new Route("users/albums/photos/update",
				new RouteValueDictionary(new { area = "user", controller = "useralbumphoto", action = "update" }),
				new MvcRouteHandler()));

			routes.Add(UserAlbumDashboardIndex, new Route("users/albums/dashboard/all/{page}",
				new RouteValueDictionary(new { area = "user/useralbum", controller = "useralbumdashboard", action = "index", page = "" }),
				new MvcRouteHandler()));

			routes.Add(UserAlbumDashboardUpdate, new Route("users/albums/dashboard/update/{id}",
				new RouteValueDictionary(new { area = "user/useralbum", controller = "useralbumdashboard", action = "update", id = "" }),
				new MvcRouteHandler()));

			routes.Add(UserAlbumDashboardDelete, new Route("users/albums/dashboard/delete/{id}",
				new RouteValueDictionary(new { area = "user/useralbum", controller = "useralbumdashboard", action = "delete", id = "" }),
				new MvcRouteHandler()));

			routes.Add(UserAlbumPhotoDelete, new Route("users/albums/photos/delete/{id}",
				new RouteValueDictionary(new { area = "user", controller = "useralbumphoto", action = "delete", id = "" }),
				new MvcRouteHandler()));

			routes.Add(UserAlbumPhotoCreate, new Route("users/albums/photos/create/{id}",
				new RouteValueDictionary(new { area = "user", controller = "useralbumphoto", action = "create", id = "" }),
				new MvcRouteHandler()));

			routes.Add(UserAlbumPhotoDetail, new Route("users/albums/photos/{slug}/{id}",
				new RouteValueDictionary(new { area = "user", controller = "useralbumphoto", action = "detail", id = "", slug = "" }),
				new MvcRouteHandler()));

			routes.Add(UserAlbumPhotoIndex, new Route("users/albums/photos/all/{id}/{page}",
				new RouteValueDictionary(new { area = "user", controller = "useralbumphoto", action = "index", id = "", page = "" }),
				new MvcRouteHandler()));

			routes.Add(UserAlbumDetail, new Route("users/albums/{slug}/{id}/{page}",
				new RouteValueDictionary(new { area = "user", controller = "useralbum", action = "detail", id = "", slug = "", page = "" }),
				new MvcRouteHandler()));
			#endregion

			#region User Avatar
			routes.Add(UserAvatarIndex, new Route("users/avatars/all/{page}",
				new RouteValueDictionary(new { area = "user", controller = "useravatar", action = "index", page = "" }),
				new MvcRouteHandler()));

			routes.Add(UserAvatarSelect, new Route("users/avatars/select/{id}",
				new RouteValueDictionary(new { area = "user", controller = "useravatar", action = "select", id = "" }),
				new MvcRouteHandler()));

			routes.Add(UserAvatarDelete, new Route("users/avatars/delete/{id}",
				new RouteValueDictionary(new { area = "user", controller = "useravatar", action = "delete", id = "" }),
				new MvcRouteHandler()));

			routes.Add(UserAvatarCreate, new Route("users/avatars/create",
				new RouteValueDictionary(new { area = "user", controller = "useravatar", action = "create" }),
				new MvcRouteHandler()));
			#endregion

			#region User Contact
			routes.Add(UserContactIndex, new Route("users/contacts/all/{mode}/{page}",
				new RouteValueDictionary(new { area = "user", controller = "usercontact", action = "index", mode = "", page = "1" }),
				new MvcRouteHandler()));

			routes.Add(UserContactFriend, new Route("users/contacts/friend/{id}/{answer}",
				new RouteValueDictionary(new { area = "user", controller = "usercontact", action = "friend", id = "", answer = "" }),
				new MvcRouteHandler()));

			routes.Add(UserContactDelete, new Route("users/contacts/delete/{id}",
				new RouteValueDictionary(new { area = "user", controller = "usercontact", action = "delete", id = "" }),
				new MvcRouteHandler()));

			routes.Add(UserContactIgnore, new Route("users/contacts/ignore",
				new RouteValueDictionary(new { area = "user", controller = "usercontact", action = "ignore" }),
				new MvcRouteHandler()));

			routes.Add(UserContactCreate, new Route("users/contacts/create",
				new RouteValueDictionary(new { area = "user", controller = "usercontact", action = "create" }),
				new MvcRouteHandler()));

			routes.Add(UserContactUpdate, new Route("users/contacts/update",
				new RouteValueDictionary(new { area = "user", controller = "usercontact", action = "update" }),
				new MvcRouteHandler()));
			#endregion

			#region User Dashboard
			routes.Add(UserDashboardIndex, new Route("users/dashboard",
				new RouteValueDictionary(new { area = "user", controller = "userdashboard", action = "index", }),
				new MvcRouteHandler()));
			#endregion

			#region User Group
			routes.Add(UserGroupDashboardCreate, new Route("users/groups/dashboard/create",
				new RouteValueDictionary(new { area = "user/usergroup", controller = "usergroupdashboard", action = "create" }),
				new MvcRouteHandler()));

			routes.Add(UserGroupDashboardUpdate, new Route("users/group/dashboard/update/{id}",
				new RouteValueDictionary(new { area = "user/usergroup", controller = "usergroupdashboard", action = "update", id = "" }),
				new MvcRouteHandler()));

			routes.Add(UserGroupDashboardDelete, new Route("users/groups/dashboard/delete/{id}",
				new RouteValueDictionary(new { area = "user/usergroup", controller = "usergroupdashboard", action = "delete", id = "" }),
				new MvcRouteHandler()));

			routes.Add(UserGroupDashboardIndex, new Route("users/groups/dashboard/all/{page}",
				new RouteValueDictionary(new { area = "user/usergroup", controller = "usergroupdashboard", action = "index", page = "" }),
				new MvcRouteHandler()));

			routes.Add(UserGroupIndex, new Route("users/groups/all/{page}",
				new RouteValueDictionary(new { area = "user", controller = "usergroup", action = "index", page = "" }),
				new MvcRouteHandler()));

			routes.Add(UserGroupDetail, new Route("users/groups/{slug}/{id}/{page}",
				new RouteValueDictionary(new { area = "user", controller = "usergroup", action = "detail", id = "", slug = "", page = "" }),
				new MvcRouteHandler()));
			#endregion

			#region User Message
			routes.Add(UserMessageIndex, new Route("users/messages/all/{folder}/{page}",
				new RouteValueDictionary(new { area = "user", controller = "usermessage", action = "index", folder = "inbox", page = "1" }),
				new MvcRouteHandler()));

			routes.Add(UserMessageCreate, new Route("users/messages/create/{mode}/{id}/{uid}",
				new RouteValueDictionary(new { area = "user", controller = "usermessage", action = "create", mode = "new", id = "", uid = "" }),
				new MvcRouteHandler()));

			routes.Add(UserMessageFolderUpdate, new Route("users/messages/folders/update/{id}",
				new RouteValueDictionary(new { area = "user", controller = "usermessagefolder", action = "update", id = "" }),
				new MvcRouteHandler()));

			routes.Add(UserMessageFolderDelete, new Route("users/messages/folders/delete/{id}",
				new RouteValueDictionary(new { area = "user", controller = "usermessagefolder", action = "delete", id = "" }),
				new MvcRouteHandler()));

			routes.Add(UserMessageFolderCreate, new Route("users/messages/folders/create",
				new RouteValueDictionary(new { area = "user", controller = "usermessagefolder", action = "create" }),
				new MvcRouteHandler()));

			routes.Add(UserMessageFolderIndex, new Route("users/messages/folders/all",
				new RouteValueDictionary(new { area = "user", controller = "usermessagefolder", action = "index" }),
				new MvcRouteHandler()));

			routes.Add(UserMessageUpdate, new Route("users/messages/update",
				new RouteValueDictionary(new { area = "user", controller = "usermessage", action = "update" }),
				new MvcRouteHandler()));

			routes.Add(UserMessageMove, new Route("users/messages/move",
				new RouteValueDictionary(new { area = "user", controller = "usermessage", action = "move" }),
				new MvcRouteHandler()));

			routes.Add(UserMessageDetail, new Route("users/messages/{id}",
				new RouteValueDictionary(new { area = "user", controller = "usermessage", action = "detail", id = "" }),
				new MvcRouteHandler()));
			#endregion

			#region User Note
			routes.Add(UserNoteIndex, new Route("users/notes/all/{id}/{page}",
				new RouteValueDictionary(new { area = "user", controller = "usernote", action = "index", id = "", page = "" }),
				new MvcRouteHandler()));

			routes.Add(UserNoteUpdate, new Route("users/notes/update/{id}",
				new RouteValueDictionary(new { area = "user", controller = "usernote", action = "update", id = "" }),
				new MvcRouteHandler()));

			routes.Add(UserNoteDelete, new Route("users/notes/delete/{id}",
				new RouteValueDictionary(new { area = "user", controller = "usernote", action = "delete", id = "" }),
				new MvcRouteHandler()));

			routes.Add(UserNoteCreate, new Route("users/notes/create",
				new RouteValueDictionary(new { area = "user", controller = "usernote", action = "create" }),
				new MvcRouteHandler()));
			#endregion

			#region User Profile
			routes.Add(UserProfileUpdate, new Route("users/profiles/update",
				new RouteValueDictionary(new { area = "user", controller = "userprofile", action = "update" }),
				new MvcRouteHandler()));
			#endregion

			#region User Preference
			routes.Add(UserPreferenceUpdate, new Route("users/preference/update",
				new RouteValueDictionary(new { area = "user", controller = "userpreference", action = "update" }),
				new MvcRouteHandler()));
			#endregion

			#region User Search
			routes.Add(UserSearchCreate, new Route("users/search/create",
				new RouteValueDictionary(new { area = "user", controller = "usersearch", action = "create" }),
				new MvcRouteHandler()));

			routes.Add(UserSearchIndex, new Route("users/search/{id}/{page}",
				new RouteValueDictionary(new { area = "user", controller = "usersearch", action = "index", id = "", page = "" }),
				new MvcRouteHandler()));

			routes.Add(UserSearchLookup, new Route("users/partials/lookup/by/{s}",
				new RouteValueDictionary(new { area = "user", controller = "usersearch", action = "lookup", s = "" }),
				new MvcRouteHandler()));
			#endregion

			#region User
			routes.Add(UserLogout, new Route("users/logout",
				new RouteValueDictionary(new { area = "user", controller = "userauth", action = "logout" }),
				new MvcRouteHandler()));

			routes.Add(UserLogin, new Route("users/login",
				new RouteValueDictionary(new { area = "user", controller = "userauth", action = "login" }),
				new MvcRouteHandler()));

			routes.Add(UserCreate, new Route("users/create",
				new RouteValueDictionary(new { controller = "user", action = "create" }),
				new MvcRouteHandler()));

			routes.Add(UserUpdate, new Route("users/update",
				new RouteValueDictionary(new { controller = "user", action = "update" }),
				new MvcRouteHandler()));

			routes.Add(UserAuthUpdate, new Route("users/password/update",
				new RouteValueDictionary(new { area = "user", controller = "userauth", action = "update" }),
				new MvcRouteHandler()));

			routes.Add(UserAuthReset, new Route("users/password/reset",
				new RouteValueDictionary(new { area = "user", controller = "userauth", action = "reset" }),
				new MvcRouteHandler()));

			routes.Add(UserIndex, new Route("users/all/{sort}/{order}/{page}",
				new RouteValueDictionary(new { controller = "user", action = "index", sort = "name", order = "asc", page = "1" }),
				new MvcRouteHandler()));

			routes.Add(UserDetail, new Route("users/{slug}/{id}/{mode}/{page}",
				new RouteValueDictionary(new { controller = "user", action = "detail", id = "", slug = "", mode = "default", page = "1" }),
				new MvcRouteHandler()));
			#endregion

			#region Home
			routes.Add(HomeIndex, new Route("",
				new RouteValueDictionary(new { controller = "home", action = "index" }),
				new MvcRouteHandler()));
			#endregion
		}
	}
}